#include "../tools.h"

/**
 * 给你一个二元数组 nums ，和一个整数 goal ，
 * 请你统计并返回有多少个和为 goal 的 非空 子数组
 * 
 */
class Solution {
public:
    int numSubarraysWithSum(vector<int>& nums, int goal) {
        // 求前缀和
        unordered_map<int, int> m;
        int sum_pre = 0;
        int res = 0;
        for(auto n: nums){
            m[sum_pre] += 1; // 前缀和哈希
            sum_pre += n;
            res += m[sum_pre - goal];
        }
        return res;
    }
};

int main(int argc, char const *argv[])
{
    vector<int> nums = {0,0,0,0,0};//{1,0,1,0,1};

    int goal = 0;//2;

    Solution s;
    int res = s.numSubarraysWithSum(nums, goal);
    cout << res;


    return 0;
}
